
========================================================================================================
MAME GP32 2.3 (October 28th, 2006) by Slaanesh (astaude@hotmail.com)
========================================================================================================


1. INTRODUCTION
---------------

It is a port of MAME 0.34 emulator by Nicola Salmoria for GP32 portable console.
To see MAME license see the end of this document (chapter 16).
It emulates all arcade games supported by original MAME for DOS, with the exception of:
- SNK NeoGeo (most likely will never be possible though small games may work)
- CPS-1 (most likely will never be possible though small games may work)
- Other games greater than GP32 memory (8 Mb)
- Other games that don't run yet due to other problems

This version emulates 802 different romsets.

It was firstly presented on MadriSX / MadriDC Party 2005, celebrated on march 5 2005 in Madrid.
It was liberated to everyone on Internet on march 6 2005 in the official webpage:

http://www.talfi.net/gp32_franxis/

Additional games from later versions of MAME have also been included. These are generally from versions of MAME up to 0.35. Game drivers for MAME version 0.36 and onwards had some large changes made to the structure of the driver, so are more difficult to convert. Also, MAME 0.37 and onwards started using 16-bit color screens instead of 256 color palette screens. This is one reason why versions of MAME < 0.37 are generally used for platforms with less capable CPU processing power.

The new webpage for this and future releases of MAME GP32 is:

http://users.bigpond.net.au/mame/gp32/

Older versions can still be found at Franxis' webpage.

2. CONTROLS
-----------

The emulator controls are the next ones:
- Joystick: Movement in pads (1, 2, 3 and 4), mouse and analog control. 
- Buttons A,B,Select,L,Start,R,Select,L,Start,R: Buttons A,B,C,D,E,F,G,H,I,J.
- Button L: Insert credits. (L+Up=credits 2P, L+Right=credits 3P, L+Down=credits 4P)
- Button R: Change screen orientation.
- Button R pressed during one second: Pause.
- Button START: Play. (START+Up=Start 2P, START+Right=Start 3P, START+Down=Start 4P)
- Buttons L+R simultaneously: Exit to selection menu to select another game.
- Buttons START+SELECT simultaneously: Reset the current game.

3. EMULATION OPTIONS
--------------------

After selecting a game on the list next configuration options are available:

- Frequency:
Press Left<->Right to change GP32 Frequency. 66 to 166 MHz seem to work with almost all BLU Model GP32.
FLU Model GP32 seem to be compatible with greater frequencies (168 up to 256 MHz).
Warning: It is dangerous to use frequencies greater than 166 MHz, use at your own risk.

- Graphics Core:
New Gfx Core: MAME GP32 v1.4 and later versions. Faster but has problems with some games:
rotated or mirrored screen (Block Out), corrupt screen (Missile Command), "Out of Memory" error (Vigilante). 
Old Gfx Core: MAME GP32 v1.3 and previous versions. Slower but with no problems with any game. Use the old core for Bosconian, Gradius, Vigilante, Missile Command, Liberator, Sega System 16. There may be others. If the screens looks unexpectedly inverted/rotated, then try the "Old Core".
- Buffering (now merged with Graphics Core)
Normal: Single video buffer. Faster but worse image quality. Recommended.
Triple Buffer: This options gives a better image quality but it is a lot slower.

- Screen Fit:
Options are Off, Skip Lines, Mix Lines. This option is useful for games which have a resolution higher than the GP32's 320x240 pixels. Skip Lines will fit the display by skipping lines. Mix Lines skips alternate lines so that skipped lines are drawn every other frame. This will produce some flicker but draws all lines in two frames. This option looks good where the FPS rate is relatively high (ie. 30 FPS+). 

- Frame-Skip:
0 to 5 Frame-Skip options are available. Less frame-skip produce better game video experience, 
but also the emulator is slowed... 1 to 2 seem to be Ok for almost every game.
Additionally Auto Frame-Skip is implemented: <=1, <=2, <=3, <=4; <=5 (in this cases,
frame-skip will be adjusted automatically by the emulator, up to the maximum selected frame-skip- ).
Note: Frameskip=1 and Frameskip=0 will produce the most efficient results. Use the FPS Display to help determine the best Frameskip value.

- FPS Display:
Options are Off, On. Displays a Frames Per Second display in the top right hand corner of the screen. This equals the actual number of frames drawn in the last second. For example, most games run at 60 FPS so with Frameskip=0, this should display 60 (or there about). This is approximate and my not be 100% accurate but gives you a good idea. This setting is not saved in the configuration file.

- Gamma Correction:
Options from 1.0 to 2.0. The higher the number the higher the contrast. 1.0 is the standard value and the fastest as no palette corrections are required. Between 1.3 - 1.5 works well for NLU and FLU. Thanks DisgruntleElf for suggesting this option.

- Video Clock:
It permits to change underclock / overclocking option for CPUs.
It is 80% by default, but has problems with some games (i.e. Trojan, Breakthru, Mikie, Super Qix, ...)
The perfect video clock is 100%, but it is slower. Emulator is faster with smaller values and slower with higher values.

- Sound:
Sound ON (11025): Standard sound option is available. Basic mixing.
Sound OFF: Sound is internally emulated but no sound output is done. Emulator is faster.
Not Emulated: Sound is not emulated and is not activated. Emulator is fastest.
Accurate (11025): Sound quality at ~11025hz, with accurate mixing. 
Accurate (22050): Good sound quality at ~22050hz with accurate mixing.
Accurate (44100): Best sound quality at ~44100hz with accurate mixing. Great for older games that already run at full speed using 22050.

- Audio Clock:
It permits to change underclock / overclocking option for audio CPUs.
It is 80% by default, but has problems with some games. The perfect sound clock is 100%, but it is slower.
Emulator is faster with smaller values and slower with higher values.
Note that some games rely on 100% Audio clock to produce sound at the correct tempo. ie. old Konami games like Timepilot and Pooyan. 

- High Scores:
Don't Use Scores: High Scores are not loaded or saved on SMC.
Use High Scores: Option to save/load High Scores on SMC. High Scores are loaded during game boot and saved

- Configuration:
No Save: Do NOT save the configuration.
Save Config: Save specific game configuration: gp:\gpmm\mamegp32\cfg\rom_name.cfg
Save as Default: Save default configuration for all games: gp:\gpmm\mamegp32\cfg\mame.cfg
(it also saves gp:\gpmm\mamegp32\cfg\rom_name.cfg)

- Press A to play the selected game or B to go back to game selection menu.

- In the game selection menu if L+R are pressed simultaneously, GP32 is reset.

- In the general selection menu if START+SELECT is pressed simultaneously, another options screen is showed:

- Delete all data for this game: It removes ROMs of the selected game and also all other configuration files.
- Use The Default Options: Remove specific configuration for the selected game.
- Reset High Scores: Reset High Scores for the selected game.
- Re-assign keys for this game: Re-assign controls (joystick and buttons) for the selected game.
- Adjust Joystick sensitivity: Adjust analog controls sensitivity for the selected game.
- Reset The Default Options: Reset default configuration for all games.
- Update available game list: Regenerate available game list.


4. INSTALLATION
---------------

\GPMM\mamegp32.fxe 		-> General frontend to select games
\GPMM\mamegpdr.fxe 		-> General frontend to select games with DrZ80 core activated.
\GPMM\DRZ80\*.fxe 		-> Emulator executables with DrZ80 core activated.
\GPMM\MAMEGP32\mclassic.fxe	-> Emulator for about 500 classics: Pacman, Frogger, Donkey Kong, etc...
\GPMM\MAMEGP32\matari.fxe	-> Emulator for Atari games: Tetris, Missile Command, etc...
\GPMM\MAMEGP32\mcapcom.fxe	-> Emulator for Capcom games: Ghosts'n Goblins, Commando, etc...
\GPMM\MAMEGP32\mdataeas.fxe	-> Emulator for Data East games: Breakthru, Shoot Out, Oscar, etc...
\GPMM\MAMEGP32\mirem.fxe	-> Emulator for Irem games: Vigilante, Kung Fu Master, etc...
\GPMM\MAMEGP32\mkonami.fxe	-> Emulator for Konami games: Contra, Yie Ar Kungfu, Track & Field, etc...
\GPMM\MAMEGP32\mnamco.fxe	-> Emulator for Namco games: Motos, Xevious, etc...
\GPMM\MAMEGP32\msega.fxe	-> Emulator for Sega games: Zaxxon, Wonder Boy, Pitfall 2, etc...
\GPMM\MAMEGP32\mtaito.fxe	-> Emulator for Taito games: Bubble Bobble, Arkanoid, Tokio, etc...
\GPMM\MAMEGP32\mtechnos.fxe	-> Emulator for Technos Japan games: Double Dragon, Renegade, etc...
\GPMM\MAMEGP32\mtecmo.fxe 	-> Emulator for Tehkan/Tecmo games: Bomb Jack, Rygar, etc...
\GPMM\MAMEGP32\mvector.fxe	-> Emulator for vector games: Asteroids, Tempest, Star Wars, Star Trek, etc...
\GPMM\MAMEGP32\mwilliam.fxe	-> Emulator for Williams games: Blaster, Defender, Joust, Robotron, etc...
\GPMM\MAMEGP32\mothers.fxe	-> Emulator for other games: Pang, Psychic 5, Ninja Kid 2, etc...
\GPMM\MAMEGP32\m68000.fxe	-> Games with M68000 processor: Nemesis, Rastan, Twin Cobra, Truxton, etc...
\GPMM\MAMEGP32\m68K6502.fxe	-> Games with M68000 and M6502 processors: Klax, Marble Madness, Gauntlet, Xybots, etc...
\GPMM\MAMEGP32\m68KZ80.fxe	-> Games with M68000 and Z80 processors: Rampage, Spy Hunter, Tapper, etc...
\GPMM\MAMEGP32\mdeast16.fxe	-> Emulator for Data East 16-bit games: Bad Dudes, Robocop, Sly Spy, etc...
\GPMM\MAMEGP32\msega16.fxe	-> Emulator for Sega System-16 games. Altered Beast, Alien Syndrome, Shinobi, etc...
\GPMM\MAMEGP32\CFG\		-> Configuration files
\GPMM\MAMEGP32\HI\		-> High Scores
\GPMM\MAMEGP32\JOY\		-> Analog joystick configuration files
\GPMM\MAMEGP32\KEY\		-> Control configuration files (joystick and buttons).
\GPMM\MAMEGP32\ROMS\		-> ROM's directory, as ZIP files or in subfolders with unzipped ROMs.
\GPMM\MAMEGP32\SAMPLES\		-> SAMPLES's (.SAM, not .WAV) directory, as ZIP files or in subfolders with unzipped ROMs.

NOTE: It is NOT mandatory to use the general frontend to select games.
Different FXE's could be copied to \GPMM\ and use the emulator like in previous MAME GP32 versions.


5. SUPPORTED GAMES
------------------

There are 803 different supported romsets. For more details, see "gamelist.txt" file.
Games have to be copied into \GPMM\MAMEGP32\ROMS folder on the SMC.


6. ROM NAMES
------------

Folder names or ZIP file names are listed on "gamelist.txt" file.
Romsets have to be MAME 0.34 final version ones (December 1998).
Some drivers are from MAME 0.35 romsets. 

Please use "clrmame.dat" file to convert romsets from other MAME versions to the ones used by
this version for GP32, using ClrMAME Pro utility, available in next webpage:

http://www.clrmame.com/


7. ORIGINAL CREDITS
-------------------

- MAME 0.34 original version for DOS by Nicola Salmoria and the MAME Team (http://www.mame.net).

- Z80Em Portable Zilog Z80 Emulator Copyright (C) Marcel de Kogel 1996,1997
  Note: the version used in MAME is slightly modified. You can find the
  original version at http://www.komkon.org/~dekogel/misc.html.

- M6502 emulator by Juergen Buchmueller.
	
- I86 emulator by David Hedley, modified by Fabrice Frances (frances@ensica.fr)
	
- M6809 emulator by John Butler, based on L.C. Benschop's 6809 Simulator V09.
	
- M6808 based on L.C. Benschop's 6809 Simulator V09.
	
- 80x86 asm M6808 emulator Copyright 1998, Neil Bradley, All rights reserved

- M68000 emulator taken from the System 16 Arcade Emulator by Thierry Lescot.

- 8039 emulator by Mirko Buffoni, based on 8048 emulator by Dan Boris.

- T-11 emulator Copyright (C) Aaron Giles 1998

- TMS34010 emulator by Alex Pasadyn and Zsolt Vasvari.

- TMS9900 emulator by Andy Jones, based on original code by Ton Brouwer.

- TMS5220 emulator by Frank Palazzolo.

- AY-3-8910 emulation based on various code snippets by Ville Hallik,
  Michael Cuddy, Tatsuyuki Satoh, Fabrice Frances, Nicola Salmoria.

- YM-2203 and YM-2151 emulation by Tatsuyuki Satoh.

- OPL based YM-2203 emulation by Ishmair (ishmair@vnet.es).

- POKEY emulator by Ron Fries (rfries@aol.com).
  Many thanks to Eric Smith, Hedley Rainnie and Sean Trowbridge for information
  on the Pokey random number generator.

- NES sound hardware info by Jeremy Chadwick and Hedley Rainne.

- YM3812 and YM3526 emulation by Carl-Henrik Skrstedt.

- YM2610 emulation by Hiromitsu Shioya.


8. GP32 PORT CREDITS
--------------------

- Port to GP32 by Franxis (fjmar@hotmail.com) based on source code
  MAME 0.34 final version (dated on december 1998).

- TheGrimReaper (m_acky@hotmail.com) has colaborated with a lot of
  things since GP32 MAME 1.3, i.e. Vector graphics support, high scores,
  general frontend, frontend improvements, bugfixes, etc. Thank you!!!
  
- Pepe_Faruk (joserod@ya.com) has colaborated with new screen centering
  code. A very good start!!!

- Reesy (drsms_reesy@yahoo.co.uk) has developed DrZ80 (Z80 ASM ARM core) and has helped
  a lot with core integration into MAME. You are the best!!!

- Dave (dev@finalburn.com) has developed Cyclone (M68000 ASM ARM core).
  Also Reesy (drsms_reesy@yahoo.co.uk) and Notaz (notasas@gmail.com) have fixed some bugs
  in the source code. http://uosis.mif.vu.lt/~grig2790/Cyclone/

- Flubba (http://hem.passagen.se/flubba/gba.html) for improvements to DrZ80.

- Slaanesh (astaude@hotmail.com) continuing development starting with version GP32 MAME 2.0 and onwards.
  Added new drivers, improved existing ones. Added Sample support. 
 


9. DEVELOPMENT
--------------

Port development started in the beginning of december 2004.

December 2004:
- Investigating future problems during porting.
- Select MAME version: 0.34, the first one with the FM Synthesis feature and also
i remember it to run quite well on a Pentium 100 computer.
- Remove drivers to be impossible to run on GP32 due to different problems.
- Remove functionalities I didn't want to port: record / play, highscores, debugger,
16 bit color, profiler, vector graphics library, etc.
- Simplify the source code.
- Porting makefile.

January 2005:
- Porting MS-DOS specific libraries to GP32 (video, sound, controls, SMC access, etc).
- First compilation tests.
- First results: Pacman and Ghosts & Goblins (yuhuuu!).

February 2005:
- Optimizations.
- Change development environment: From DevKitAdvance to DevKitArm.
- Big problem solved: Vertical scanlines and sound problems, solved finally changing Z80
emulator with another one: Portable Z80 Emulator (1998, by Juergen Buchmueller).
- Organization of different drivers into several executables.

March 2005:
- March 5 2005: Firstly presented on MadriSX / MadriDC Party in Madrid (Spain).
http://www.madrisx.cjb.net/
- March 6 2005: Liberated on Internet through official project webpage:
http://www.talfi.net/gp32_franxis/
- March 20 2005: Version 1.1 of MAME port released.

June 2005:
- June 8 2005: Version 1.2 released (bugfix version).
Release for GBAX.COM & EMUHOLIC.COM Coding Competition 2005.

July 2005:
- July 10 2005: Version 1.3. Vector games support.
- July 23 2005: Version 1.4. New games supported.

August 2005:
- August 14 2005: Version 1.5. General frontend working.
- August 21 2005: Version 1.6. Highscores support.
- August 28 2005: Version 1.7. Cyclone core integrated.

September 2005:
- September 12 2005: Version 1.8. Frontend improvements.
- September 29 2005: Version 1.9. DrZ80 core integrated.

April 2006:
- April 2 2006: Version 2.0. New games supported. Many optimizations. Data East 16-bit games module.

April 2006:
- April 20 2006: Version 2.1. New games supported: Robocop. Many optimizations. Data East 16-bit games module.

August 2006:
- August 5 2006: Version 2.2. Added .SAM sample support. Updated Z80 core. 1942 works. Optimizations to sound.

October 2006:
- October 21 2006: Version 2.3. Added many new games ie.Twin Cobra. Updated 6280 core. New options.

Developed with:
- DevKitArm r19 Mac OS X version (http://sourceforge.net/project/showfiles.php?group_id=114505).
- Official GPSDK by GamePark.
- GpSoundBuf (http://chn.roarvgm.com/).
- b2fxec (http://www.deadcoderssociety.tk).
- GP32 Converter (http://www.ifrance.com/edorul/gp32/).
- Geepee32 GP32 Emulator (http://users.skynet.be/firefly/gp32/).
- MakeSMC (http://users.skynet.be/firefly/gp32/).
- Vim (http://www.vim.org/).


10. KNOWN PROBLEMS
------------------

- Not perfect sound or incomplete in some games.

- Slow playability in modern games.

- Memory eating after some games played, most noticeable if there is an error during
ROMs loading or during emulation. In that case, reset GP32 and test again please ;-).

- Minor problems with frontend.


11. TO BE IMPROVED
------------------

- Improve sample sound, using streams.c for smoother playback.

- Improve speed?

- Add support to more games. Twin Cobra is next on the list!

- Front end fixes. Dynamic loading of bitmaps to reduce memory for larger ROMs.

- Fully compatible DrZ80 would be fantastic but that's up to Reesy and Flubba. :-)


12. THANKS TO
-------------

- TheGrimReaper: Thanks for your hard work with the vector graphics library, among other
things... You are the best !!!.

- Reesy: Gracias por el genial core Z80 ASM ARM (DrZ80).

- Pepe_Faruk: Thank for the new screen centering code ;-)

- Unai: Thanks Unai due to a lot of hours helping me with MAME, optimizations...

- Dave, Reesy, Notaz: Thank you due to a fantastic M68000 ASM ARM core (Cyclone). Thanks to Notaz for the recent Cyclone update!

- Talfi: Friend who gives me the webspace for my MAME port for GP32.

- Chicho: Great friend with blind faith on my MAME port...

- Rlyeh: Master of GP32 emulation... Also the master of trails xD.
But some of theme were vital, thanks Ryleh ;-).

- Antiriad: Thank you for the excelent artwork ;-).

- Baktery: Sound advices.

- Groepaz: More sound advices.

- Woogal: Big help with the games selection frontend... 

- LDChen: Help with some ASM code for the vector graphics library.

- Chui : Lots of assistance during my previous project Multipac, but very exceptical
with my MAME port...

- D_Skywalk : Multipac runs now due his help. He teached me a lot of GP32 programming.

- Locke : Advices, beta-testing...

- Ron: Really mad man, but good old one ;-). MadriDC organizer.

- Ilarri: Cheers ;-).

- Fox68k: Good advices.

- DaveC: Searching bugs in my MAME port. Thanks ;-).

- Creature XL: Some testing with ASM for the video output.

- EvilDragon: Creator of MAMEGP-COPIER utility. Also moderator & news-poster of gp32x.com

- Anarchy: He incentive me to do the MAME port, due to his laugh when i talk about it during
previous MadriDC 2004 Party.

- People on IRC-Hispano #gp32dev beta-testing: Xenon, Mortimor, Nestruo, Dj_Syto, K-Teto,
Ilarri, Enkonsierto, Soup, joanvr, amkan, etc.

- More beta-testing: Locke, nullEX, Propeller, Ozius, etc.

- Hooka: Thank you for a great interview: http://www3.telus.net/public/hooka/

- Mark Rowley: Thank you for the interview for GamePark Magazine 7:
http://www.gp32x.de/cgi-bin/cfiles.cgi?0,0,0,0,2,630

- Gladiator: Thank you for the spanish interview, as well as the great GP32 article: 
http://www.viciojuegos.com/reportaje.jsp?idReportaje=131


13. INTERESTING WEBPAGES ABOUT MAME
-----------------------------------

- http://www.mame.net/
- http://www.mameworld.net/
- http://www.marcianitos.org/


14. SOME OTHER INTERESTING WEBPAGES
-----------------------------------

- http://www.talfi.net
- http://www.gp32x.com
- http://www.gp32spain.com


15. CONFIGURATION FILES
-----------------------

* Specific game configuration: gp:\gpmm\mamegp32\cfg\rom_name.cfg
  Default configuration: gp:\gpmm\mamegp32\cfg\mame.cfg
  Contents: gp32_freq=x;gp32_frameskip=x;gp32_frameskip_auto=x;gp32_sound=x;gp32_clock_cpu=x;gp32_clock_sound=x;highscore_enabled=x;gp32_new_gfx_core=x;gp32_gamma=x;
  gp32_freq=x -> GP32 Clock Speed: 133 <= x <= 256
  gp32_frameskip=x -> Video Frameskip: 0 <= x <= 5
  gp32_frameskip_auto=x -> Auto Frameskip: 1=On, 0=Off.
  gp32_sound=x -> Sound (0=not emulated, 1=ON 11025, 2=OFF, 3=Accurate 11025, 4=Accurate 22050, 5=Accurate 44100)
  gp32_clock_cpu=x -> 80=20% underclock, 120=20% overclocking,...
  gp32_clock_sound=x -> 80=20% underclock, 120=20% overclocking,...
  highscore_enabled=x -> High Scores: 0=OFF, 1=ON
  gp32_new_gfx_core=x -> Video Gfx Core: 1=New Gfx Core, 0=Old Gfx Core, Video Triple Buffer: 1=ON, 0=OFF
  gp32_gamma=x -> 10 <= x <= 2004 

* Analog controls configuration: gp:\gpmm\mamegp32\joy\rom_name.joy
  Contents: x_sensitivity=x;y_sensitivity=x;x_reversed=y;y_reversed=y; (Values: 1 <= x <= 255, 0 <= y <= 1).

* Controls configuration: gp:\gpmm\mamegp32\key\rom_name.key
  Contents: LEFT=x;RIGHT=x;UP=x;DOWN=x;FIRE1=x;FIRE2=x;FIRE3=x;FIRE4=x;FIRE5=x;FIRE6=x;FIRE7=x;FIRE8=x;FIRE9=x;FIRE10=x;AUTO1=[0|1];AUTO2=[0|1];AUTO3=[0|1];
  1=LEFT,4=RIGHT,8=UP,2=DOWN,64=A,32=B,16=L,128=R,256=START,512=SELECT.

* List of available games: gp:\gpmm\mamegp32\cfg\gamelist.cfg
  This is a list of all available games found in gp:\gpmm\mamegp32\roms\.

* High Scores: gp:\gpmm\mamegp32\hi\rom_name.hi
  High Scores for each of the games.


16. MAME LICENSE
----------------

http://www.mame.net
http://www.mamedev.com

Copyright  1997-2005, Nicola Salmoria and the MAME team. All rights reserved. 

Redistribution and use of this code or any derivative works are permitted provided
that the following conditions are met: 

* Redistributions may not be sold, nor may they be used in a commercial product or activity. 

* Redistributions that are modified from the original source must include the complete source
code, including the source code for all components used by a binary built from the modified
sources. However, as a special exception, the source code distributed need not include 
anything that is normally distributed (in either source or binary form) with the major 
components (compiler, kernel, and so on) of the operating system on which the executable
runs, unless that component itself accompanies the executable. 

* Redistributions must reproduce the above copyright notice, this list of conditions and the
following disclaimer in the documentation and/or other materials provided with the distribution. 

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR 
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 
OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
